<?php

class auditoria extends Baseauditoria
{
    public static function AuditarActualización(){
              $auditoria = new auditoria();
              $evento =  sfContext::getInstance()->getActionName();
              $Modulo =  sfContext::getInstance()->getModuleName();
              $usuario = sfContext::getInstance()->getUser();
              $auditoria->setEvento($evento);
              $auditoria->setTabla($Modulo);
              $auditoria->setUsuario($usuario);
              $auditoria->save();
              return $auditoria->getId();
    }
    public static function AuditoriaFull($objeto = null,$borrado = NULL){
           
           //Crear la Cabecera
           $hubo_modificacion = false;
           $peer              = $objeto->getPeer();
           $tabla             = $peer->getTableName();
           $campos            = $peer->getFieldNames(BasePeer::TYPE_PHPNAME);
           $nombre_columnas   = $peer->getFieldNames(BasePeer::TYPE_COLNAME);
            //
            // <---------------------------------------------------------
           for($numero_campos=0;$numero_campos< count($nombre_columnas);$numero_campos++){
                if ($objeto->isColumnModified($nombre_columnas[$numero_campos])){
                    $hubo_modificacion = true;
                    break;
                }
           }
           //--------------------------------------------------------------//
           if($hubo_modificacion || $borrado){
               $auditoria = new auditoria();
               if($objeto->isNew())
                   $evento  = 'CREACION';
               else
                   if($borrado)
                      $evento  = 'BORRADO';
                   else
                       $evento  = 'MODIFICACION';
               //$evento =  sfContext::getInstance()->getActionName();
               $modulo =  sfContext::getInstance()->getModuleName();
               if (sfContext::getInstance()->getUser()->isAuthenticated())
                    $usuario = sfContext::getInstance()->getUser();
               else
                   $usuario = 'No Logueado';
               $auditoria->setEvento($evento);
               $auditoria->setTabla($tabla);
               //$auditoria->setTabla($tabla);
               $auditoria->setUsuario($usuario);
               $auditoria->save();
               //=================================================
                   
                   if($evento == 'MODIFICACION'){
                      $det = new auditoria_detalle();
                      $det->setAuditoriaId($auditoria->getId());
                      $det->setCampo('id');
                      $det->setNuevovalor($objeto->getId());
                      $det->setValoranterior($objeto->getId());
                      $det->save();
                   }
               //=================================================
             $cont=0;
               foreach($campos as $x){
                   $det = new auditoria_detalle();
                   $det->setAuditoriaId($auditoria->getId());
                   $det->setCampo($x);
                   if ($borrado){
                      $det->setValoranterior($objeto->getByposition($cont));
                      $det->setNuevovalor('');
                      $det->save();
                   }
                   else{
                      if ($objeto->isColumnModified($nombre_columnas[$cont])){
                          $det->setValoranterior($objeto->getByposition_old($cont));
                          $det->setNuevovalor($objeto->getByposition($cont));
                          $det->save();
                      }
                   }
                   $cont++;
               }
           }
           else
             return null;
    }
}
